#ifndef FPLAYER_RENDER_H
#define FPLAYER_RENDER_H

#include "MediaDefine.h"
#include "concurrent/HandlerThread.h"



//枚举 渲染类型
enum RenderType {
  RenderType_Audio = 0,       //音频
  RenderType_Video,           //视频
  RenderType_MP4,             //MP4文件
  RenderType_RTMP,            //RTMP流
  RenderType_RTSP,            //RTSP流
};

//枚举 渲染状态
enum RenderState {
  RenderState_None = 0,
  RenderState_Init,           //初始化完成状态
  RenderState_Start,          //开始渲染状态
  RenderState_Stop,           //停止渲染状态
  RenderState_Pause,          //暂停渲染状态
};

//枚举 消息ID
enum MsgIDRender {
  MsgIDRender_Start = MsgID_None,
  MsgIDRender_Stop,
  MsgIDRender_Resume,
  MsgIDRender_Pause,
};

//结构体 渲染参数
struct RenderParam {
  RenderType type = RenderType_Audio;
};

/**
 * author: x-fan
 * date: 2024/1/9
 * desc: 渲染定义
 */
class IRender : public HandlerThread {
protected:
  //渲染状态
  RenderState _State = RenderState_None;

public:
  explicit IRender(RenderParam *pRenderParam) {

  };

  virtual ~IRender() = default;

  /**
   * 开始渲染
   */
  virtual void startRender() = 0;

  /**
   * 停止渲染
   */
  virtual void stopRender() = 0;

  /**
   * 继续渲染
   */
  virtual void resumeRender() = 0;

  /**
   * 暂停渲染
   */
  virtual void pauseRender() = 0;

  /**
   * 视频渲染、音频渲染或者音视频渲染
   * @return MediaType_Video、MediaType_Audio、(MediaType_Video|MediaType_Audio)
   */
  virtual int32_t capacity() = 0;

  void handleMessage(Message *pMsg) override;
};


/************************* 渲染对象管理 *************************/
#ifdef __cplusplus
extern "C" {
#endif

/**
 * 创建渲染对象
 * @param pRenderParam 渲染参数
 * @return pRender 渲染对象
 */
IRender *Render_Create(RenderParam *pRenderParam);

/**
 * 渲染对象释放资源
 * @param pRender 渲染对象
 */
void Render_Destroy(IRender *pRender);

/**
 * 渲染对象开始渲染
 * @param pRender 渲染对象
 */
void Render_Start(IRender *pRender);

/**
 * 渲染对象停止渲染
 * @param pRender 渲染对象
 */
void Render_Stop(IRender *pRender);

/**
 * 渲染对象继续渲染
 * @param pRender 渲染对象
 */
void Render_Resume(IRender *pRender);

/**
 * 渲染对象暂停渲染
 * @param pRender 渲染对象
 */
void Render_Pause(IRender *pRender);

#ifdef __cplusplus
}
#endif

#endif //FPLAYER_RENDER_H
